package com.example.OnlineStorage.service.User;

import com.example.OnlineStorage.pojo.Response.ResponseData;
import com.example.OnlineStorage.pojo.entity.User;
import lombok.SneakyThrows;
import org.springframework.web.multipart.MultipartFile;

/**
 * 用户服务接口，提供用户注册、登录、更新信息、上传头像等操作。
 */
public interface UserService {
	
	/**
	 * 注册新用户。
	 *
	 * @param user 新用户信息。
	 * @return 注册后的用户信息。
	 */
	User register(User user);
	
	/**
	 * 通过用户名登录。
	 *
	 * @param user 包含用户名和密码的用户信息。
	 * @return 登录验证后的用户信息。
	 */
	User login_username(User user);
	
	/**
	 * 通过邮箱登录。
	 *
	 * @param user 包含邮箱和密码的用户信息。
	 * @return 登录验证后的用户信息。
	 */
	User login_email(User user);
	
	/**
	 * 更新用户信息。
	 *
	 * @param user 新的用户信息。
	 * @param UUID 用户唯一标识。
	 * @return 更新后的用户信息。
	 */
	User updateUser(User user, String UUID);
	
	/**
	 * 上传头像。
	 *
	 * @param file 用户上传的头像文件。
	 * @param fileSHA256 头像文件的SHA256校验码。
	 * @param UUID 用户唯一标识。
	 * @return 更新后的用户信息。
	 */
	User putAvatar(MultipartFile file, String fileSHA256, String UUID);
	
	/**
	 * 获取用户头像。
	 *
	 * @param Avatar 头像的标识或地址。
	 * @param range HTTP请求中的Range头，用于指定获取资源的范围。
	 * @return 包含头像数据的响应信息。
	 */
	ResponseData getAvatar(String Avatar, String range);
	
	/**
	 * 更新用户密码。
	 *
	 * @param oldPassword 原密码。
	 * @param newPassword 新密码。
	 * @param newPassword2 新密码确认。
	 * @param UUID 用户唯一标识。
	 */
	void updatePassword(String oldPassword, String newPassword, String newPassword2, String UUID);
	
	/**
	 * 用户登出。
	 *
	 * @param UUID 用户唯一标识。
	 */
	void logout(String UUID);
	
	/**
	 * 检查用户名是否重复。
	 *
	 * @param username 待检查的用户名。
	 * @return true表示重复，false表示不重复。
	 */
	boolean repeatUsername(String username);
	
	/**
	 * 检查邮箱是否重复。
	 *
	 * @param email 待检查的邮箱。
	 * @return true表示重复，false表示不重复。
	 */
	boolean repeatEmail(String email);
}
